package com.yixun.qfbao.api.service;

import com.yixun.qfbao.apidto.PremisesIntentionResDto;
import com.yixun.qfbao.apidto.SyncFollowAndAffixReqDto;
import com.yixun.qfbao.apidto.V10EmployeeInfoDto;
import com.yixun.qfbao.apidto.v10dto.*;
import com.yixun.qfbao.model.OtherCompany;
import com.yixun.qfbao.model.PremisesDynamicExternal;
import com.yixun.qfbao.model.PremisesRelationExternal;
import com.yixun.qfbao.xf.model.CustomerPremises;
import com.yixun.qfbao.xf.model.Premises;
import com.yixun.qfbao.xf.model.dto.PremisesDynamicDto;

import java.util.List;
import java.util.Map;

public interface V10BindService {

    void asyncV10PushEmployeeInfo(Map<String, List<V10EmployeeInfoDto>> map);


    /**
     * 楼盘同步接口
     * 接口描述：渠道王添加新房并审核通过后，可调用此接口将新房楼盘的信息添加到v10系统新房楼盘数据表中
     * URL:/v1/fyapi/saveFirstHandEstate
     * @param dto
     */
    List<BaseResponseDto> saveFirsthandEstate(Premises dto,List<OtherCompany> otherCompanyList);

    /**
     * 接口描述：保存新房楼盘动态 。
     * URL:/v1/fyapi/saveFirstHandEstateDynamic
     * @param list
     * @param premisesDynamic
     * @return
     */
    List<BaseResponseDto> saveFirsthandEstateDynamic(List<PremisesDynamicExternal> list, PremisesDynamicDto premisesDynamic);

    /**
     * 接口描述：渠道王对其推送到V10系统的楼盘进行上下架操作。
     * URL:/v1/fyapi/issueFirstHandEstate
     * @param list
     * @param status
     * @return
     */
    List<BaseResponseDto>  issueFirsthandEstate(Premises premsies,List<PremisesRelationExternal> list,String status);

    /**
     * 接口描述：渠道王对V10系统报备到其系统中的新房楼盘的审核状态进行更新操作。
     * URL:/v1/fyapi/updateFirstHandIntentionAuditStatus
     * @param reqDto
     * @param syncReqDto 
     * @return
     */
    BaseResponseDto updateFirsthandIntentionAuditStatus(UpdateFirsthandIntentionAuditStatusReqDto reqDto, SyncFollowAndAffixReqDto syncReqDto);

    /**
     * 接口描述：渠道王对V10系统报备到其系统中的新房楼盘的交易状态进行更新操作。
     * URL:/v1/fyapi/updateFirstHandIntentionTradeStatus
     * @param reqDto
     * @param syncReqDto 
     * @return
     */
    BaseResponseDto updateFirsthandIntentionTradeStatus(UpdateFirsthandIntentionTradeStatusReqDto reqDto, SyncFollowAndAffixReqDto syncReqDto);

    /**
     * 接口名：updateFirsthandEstateSaleStatus
     * 接口描述：渠道王对其推送到V10系统的楼盘进行上下架操作。
     * URL:POST /v1/fyapi/firsthandEstate/updateFirsthandEstateSaleStatu
     * @param list
     * @param status
     * @return
     */
    List<BaseResponseDto> updateFirsthandEstateSaleStatus(List<PremisesRelationExternal> list,String status);

    /**
     * 接口名称
     * @param list
     * @return
     */
    List<BaseResponseDto> deleteFirsthandEstate(List<PremisesRelationExternal> list);
    
    
    /**
     * 接口描述：渠道王对V10系统同步跟进和附件。
     * URL:/v1/fyapi/
     * @param syncReqDto
     * @return
     */
    BaseResponseDto syncFollowAndAffix(SyncFollowAndAffixReqDto syncReqDto,String premisesUuid);

    /**
     * 接口描述：渠道王报备信息同步到V10。
     * URL:/v1/fyapi/firsthandEstate/syncIntention
     * @param customerPremises
     * @return
     */
    BaseResponseDto syncIntention(CustomerPremises customerPremises);

    /**
     * 接口描述：渠道王对V10系统报备到其系统中的新房楼盘的状态进行异步通知操作。
     * @param intentionUuid
     * @param code
     * @param companyId
     * @return
     */
    BaseResponseDto synsNoticeForReport(String intentionUuid,String code,Long companyId,String msg);

    /**
     * job
     * @param cp
     * @param premises
     */
    void asyncReportInvalidForJob(CustomerPremises cp,Premises premises);

    /**
     *  根据报备UUID查询报备状态和交易状态
     * @param intentionUuid
     * @param sysId
     * @return
     */
    PremisesIntentionResDto queryIntentionStatus(String intentionUuid, String sysId);

    void  batchPushReportModel(Long premisesId, List<Long> premisesIds);

    BaseResponseDto syncChannelIntentionStatus(SyncChannelIntentionStatusDTO reqDto);

    BaseResponseDto exchangeHouses(UpdateFirsthandIntentionTradeStatusReqDto reqDto, SyncFollowAndAffixReqDto syncReqDto);

    /**
     * 接口描述：渠道王对V10系统报备复访更新实际到访时间
     * URL:/v1/fyapi/updateFirsthandIntentionRevisit
     * @param reqDto
     * @param syncReqDto
     * @return
     */
    BaseResponseDto updateFirsthandIntentionRevisit(FirsthandIntentionRevisitReqDto reqDto, SyncFollowAndAffixReqDto syncReqDto);

}
